package bavaria.hightech.banking;

import java.util.Date;

import bavaria.hightech.exceptions.FestgeldKontoNichtUeberziehbar;
import bavaria.hightech.konditionen.FestgeldKonditionen;
import bavaria.hightech.konditionen.Laufzeit;
import bavaria.hightech.money.Money;
import bavaria.hightech.zeitgeber.Zeitgeber;

public class FestgeldKonto extends Konto{

	private double habenzins;
	private FestgeldKonditionen kon;

	private Date erstellDatum;
	private Date verzinsDatum;
	
	public FestgeldKonto(int kontonr, String kontoinhaber, FestgeldKonditionen kon) {
		super(kontonr, kontoinhaber);
		habenzins = kon.getHabenzins();
		this.kon = kon;
		
		erstellDatum = new Date();
		verzinsDatum = getVerzinsDatum();
		
	}
	
	@SuppressWarnings("deprecation")
	private Date getVerzinsDatum(){
		Date buff = erstellDatum;
		if(kon.getLaufzeit() == Laufzeit.EINS){
			buff.setMonth(buff.getMonth() + 1);
			return buff;
		}
		else if(kon.getLaufzeit() == Laufzeit.DREI){
			buff.setMonth(buff.getMonth() + 3);
			return buff;
		}
		else{
			buff.setMonth(buff.getMonth() + 12);
			return buff;
		}
		
	}

	@Override
	public void verzinsen() {
		if(Zeitgeber.getInstance().getCalendar().getTime().after(verzinsDatum)){
			Money kontostand = new Money((long)(getKontostand().getBetrag()*habenzins/100), getKontostand().getCurrency());
			einzahlen(kontostand, "Verzinsen");
			verzinsDatum = getVerzinsDatum();
		}
		
	}
	
	@Override
	public void abheben(Money betrag, String grund) throws FestgeldKontoNichtUeberziehbar{
		if(getKontostand().bigger(betrag))
			super.abheben(betrag, grund);
		else
			throw new FestgeldKontoNichtUeberziehbar("Ungueltiger Betrag, Festgeldkonto darf nicht ueberzogen werden, Arschloch!");
	}

}
